﻿'
' Copyright (c) 2010-2012, MatthiWare
'
' Permission is hereby granted, free of charge, to any person obtaining a
' copy of this software and associated documentation files (the "Software"),
' to deal in the Software without restriction, including without limitation
' the rights to use, copy, modify, merge, publish, distribute, sublicense,
' and/or sell copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in
' all copies or substantial portions of the Software. 
' You shall include 'MatthiWare' in the credits/about section of the program
'
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
' DEALINGS IN THE SOFTWARE.
'

Imports System.IO
Imports System.Xml.Serialization

Public Class ConfigManager(Of T)
    Private serializer As XmlSerializer

    Public Sub New()
        serializer = New XmlSerializer(GetType(T))
    End Sub

    Public Sub Save(obj As T)
        Dim fsSaveFile As FileStream = File.Open(GetFileName(obj), FileMode.OpenOrCreate, FileAccess.Write)
        serializer.Serialize(fsSaveFile, obj)
        fsSaveFile.Dispose()
    End Sub

    Public Function GetFileName(onj As T) As String
        Return String.Format(".\{0}.xml", onj.GetType().Name)
    End Function

    Public Function Load(obj As T) As T
        Dim fsLoadFile As FileStream = File.Open(GetFileName(obj), FileMode.Open, FileAccess.Read)
        Dim returnObj As T = DirectCast(serializer.Deserialize(fsLoadFile), T)
        fsLoadFile.Dispose()
        Return returnObj
    End Function

End Class
